<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
<script>
    var arr=[0,1,2,3,4,5,6,7,8,9];

    //洗牌算法
    function shuffle(arr){
        var l=arr.length,mt;
        while(l){
            mt=Math.random()*(l--)|0;
            [arr[mt],arr[l]]=[arr[l],arr[mt]];
        }
        return arr;
    }
    console.log(shuffle(arr));


    //测试洗牌算法随机性
    function test(arr,sort){
        var arr=arr.slice(),total=100,list=[];
        for(let i=0;i<total;i++){
            list.push(sort(arr));
        }
        var result=[];
        for(let j=0;j<arr.length;j++){
            var sum=0;
            for(let k=0;k<total;k++){
                sum+=list[k][j];
            }
            result.push(sum/total);
        }
        return result;
    }
    console.log('shuffle:',test(arr,shuffle));


    //测试使用Array原型sort使用Math.random()排序的随机性
    function test2(arr){
        var total=100,list=[];
        for(let i=0;i<total;i++){
            list.push(arr.slice().sort(function () {
                return Math.random()-0.5;
            }));
        }
        var result=[];
        for(let j=0;j<arr.length;j++){
            var sum=0;
            for(let k=0;k<total;k++){
                sum+=list[k][j];
            }
            result.push(sum/total);
        }
        return result;
    }
    console.log('Math.sort:',test2(arr,shuffle));



    //方法2：
    function shuffle2(arr){
        var len=arr.length,shuffled=new Array(len);
        for(var i= 0,mt;i<len;i++){
            mt=Math.round(Math.random()*i);
            shuffled[mt]=arr[i];
            if(mt!==i)shuffled[i]=shuffled[mt];
        }
        return shuffled;
    }
    console.log(shuffle2(arr));
    console.log('shuffle2:',test(arr,shuffle2));


</script>
</body>
</html>